<?php

/**
 * Created by PhpStorm.
 * User: ChengChaogui
 * Date: 2016/11/28
 * Time: 10:35
 */
namespace App\Framework\Session;

use App\Framework\Config\SystemConstant;
use Session;

class ManagerSession
{
    private static $current_manager = 'current_manager';
    private static $captcha_code = 'captcha_code';

    /**
     * 写入登录会话
     * @param $loginedManager
     */
    public static function login($loginedManager)
    {
        Session::put(self::$current_manager, $loginedManager);
        Session::save();
    }

    /**
     * 退出登录会话
     */
    public static function logout()
    {
        if (Session::has(self::$current_manager)) {
            Session::forget(self::$current_manager);
        }
    }

    /**
     * 设置验证码
     * @param $captcha
     */
    public static function setCaptcha($captcha)
    {
        Session::put(self::$captcha_code, $captcha);
        Session::save();
    }

    /**
     * 获取验证码
     * @return string
     */
    public static function getCaptcha()
    {
        $code = '';
        if (Session::has(self::$captcha_code)) {
            $code = Session::pull(self::$captcha_code);
        }

        return $code;
    }

    /**
     * 获取当前会话
     * @return null
     */
    public static function getCurrent()
    {
        if (Session::has(self::$current_manager)) {
            return Session::get(self::$current_manager);
        }

        return null;
    }

    /**
     * 获取当前会话中的管理员ID
     * @return mixed
     */
    public static function getManagerID()
    {
        $manager = self::getCurrent();
        return $manager->getManagerID();
    }

    /**
     * 获取当前会话中的管理员账号
     * @return mixed
     */
    public static function getUsername()
    {
        $manager = self::getCurrent();
        return $manager->getUsername();
    }

    /**
     * 获取当前会话中的管理员角色ID
     * @return mixed
     */
    public static function getRoleID()
    {
        $manager = self::getCurrent();
        return $manager->getRoleID();
    }

    /**
     * 获取当前会话中的管理员角色名称
     * @return mixed
     */
    public static function getRoleName()
    {
        $manager = self::getCurrent();
        return $manager->getRoleName();
    }

    /**
     * 获取当前会话中的管理员真实姓名
     * @return mixed
     */
    public static function getRealName()
    {
        $manager = self::getCurrent();
        return $manager->getRealName();
    }

    /**
     * 获取当前会话中的管理员的管理模块
     * @return mixed
     */
    public static function getModules()
    {
        $manager = self::getCurrent();
        return $manager->getModules();
    }

    /**
     * 获取当前会话中的管理员的管理权限
     * @return mixed
     */
    public static function getPermissions()
    {
        $manager = self::getCurrent();
        return $manager->getPermissions();
    }

    /**
     * 获取模块及权限值的映射，module_id=>vlaue
     * @return mixed
     */
    public static function getPermissionMap()
    {
        $manager = self::getCurrent();
        return $manager->getPermissionMap();
    }

    /**
     * 验证管理员是否已登录
     * @return bool
     */
    public static function isLogined()
    {
        $manager = self::getCurrent();
        return empty($manager) == false;
    }

    /**
     * 验证是否有权限操作当前模块
     * @param $moduleID
     * @param $permissionID
     * @return bool
     */
    public static function hasPermission($moduleID, $permissionID)
    {
        //超级管理员默认拥有所有权限
        if (self::getRoleID() == SystemConstant::SUPER_MANAGER_ROLE_ID) {
            return true;
        }

        $permissionMap = self::getPermissionMap();

        if (array_key_exists($moduleID, $permissionMap) == false) {
            return false;
        }

        $per = $permissionMap[$moduleID];

        if (($per & $permissionID) > 0) {
            return true;
        }

        return false;
    }
}